import {
    NextRequest,
    NextResponse
} from 'next/server'
import {
    prisma
} from '@/lib/db'
import bcrypt from 'bcryptjs';
// 匹配规则 符号数学
// .什么都匹配，匹配一个
// +一次或多次
// @ email 必须要有的字符
// .+@ 在@前面至少要有一个字符
// \. 一定要有一个.
import {
    emailRegex,
    passwordRegex
} from '@/lib/regexp';
// restful
export async function POST(req: NextRequest) {
    // 容错处理 稳定为主
    try {
        const {
            email,
            password
        } = await req.json();
        // 正则
        if (!email || !emailRegex.test(email)) {
            return NextResponse.json({
                error: '邮箱格式错误'
            }, {
                status: 400
            })
        }
        if (!password || !passwordRegex.test(password)) {
            return NextResponse.json({
                error: '密码需要6-18位，包含字母、数字和特殊字符'
            }, {
                status: 400
            })
        }
        // 数据库查询
        const existUser = await prisma.user.findUnique({
            where: {
                email
            }
        })
        if (existUser) {
            return NextResponse.json({
                error: '邮箱已存在'
            }, {
                status: 409
            })
        }
        // 密码的单向加密
        const hashedPassword = await bcrypt.hash(password, 10);
        // 数据库操作
        await prisma.user.create({
            data: {
                email,
                password: hashedPassword
            }
        })
        return NextResponse.json({
            message: '注册成功'
        },{
            status: 201
        })
    } catch (error) {
        return NextResponse.json({
            error: '注册失败'
        },{
            status: 500
        })
    } finally {
        // 释放数据库对象
        await prisma.$disconnect();
    }
}